home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 145
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin
/
tools
/
sharp
/
sxwork3.lzh
/
サンプル実用編
/
チャート
/
CHDRAW.C
< prev
next >
Wrap
Text File
|
1994-03-10
|
19KB
|
644 lines
/******************************************************************************
* chdraw.c: チャートの描画処理関数
******************************************************************************
* Workroom SX-68K Sample Program Copyright 1994 SHARP
*/
#include <stdio.h>
#include <math.h>
#include <sxgraph.h> /* グラフ系マネージャを利用するときに必要 */
#include <dialog.h> /* ダイアログマンを利用するときに必要 */
#include "chart.h" /* このプログラム固有のヘッダファイル */
static Rect rcoval = { 50, 50 + GRPY, 50 + 200, 50 + GRPY + 200 };
/******************************************************************************
* drawCircle(): 円グラフの描画
******************************************************************************
* 引数: ComVal *pcv 共通変数へのポインタ
*/
void drawCircle(ComVal *pcv)
{
int i, r; /* 円グラフの中心点 */
int oldpm, oldfc, oldbc, oldfm, oldff;
Point pt1, pt2;
Rect rc; /* レクタングル */
char str[32]; /* 文字列格納用 */
static Rect OgiRect = { 0, 0, 40, 40 };
/* 描画属性設定 */
oldpm = GMPenMode(G_PSET);
oldfc = GMForeColor(GC_BLACK);
oldbc = GMBackColor(GC_WHITE);
oldfm = GMFontMode(G_PSET);
/* タイトル */
oldff = GMFontFace(G_BOLD | G_ULINE);
drawStrZ("円 グ ラ フ (単位:% )", LONGWORD(15, GRPY + 10));
GMFontFace(oldff);
/* 総額表示 */
sprintf(str, "合 計 %8d 円\0", pcv->sum[pcv->month - 1]);
drawStrZ(str, LONGWORD(OGIX, GRPY + 10));
/* 各項目名の表示 */
r = OgiRect.d.right / 2;
for (i = 0; i < 7; i++) {
rc = OgiRect;
GMSlideRect(&rc, LONGWORD(OGIX, i * 30 + 30 + GRPY));
GMForeColor(gColor[i]);
GMFillArc(&rc, CRCLSTR, CRCLEND);
/* 扇型の縁取り */
GMForeColor(GC_BLACK);
GMFrameArc(&rc, CRCLSTR, CRCLEND);
pt1.p.x = (rc.d.right + rc.d.left) / 2 - 1;
pt1.p.y = (rc.d.bottom + rc.d.top) / 2 - 1;
pt2.x_y = angleToPos(CRCLSTR, r, r);
pt2.p.x += pt1.p.x;
pt2.p.y += pt1.p.y;
GMMove(pt2.x_y);
GMLine(pt1.x_y);
pt2.x_y = angleToPos(CRCLEND, r, r);
pt2.p.x += pt1.p.x;
pt2.p.y += pt1.p.y + 1;
GMLine(pt2.x_y);
drawStrZ(crclTtl[i], LONGWORD(OGIX + 55, rc.d.top + 4));
}
/* データ表示不能のとき */
if (pcv->sum[pcv->month - 1] == 0) {
GMForeColor(GC_BLACK);
/* 円弧描画レクタングル */
GMFrameOval(&rcoval);
GMPenMode(oldpm);
GMForeColor(oldfc);
GMBackColor(oldbc);
GMFontMode(oldfm);
return;
}
/* 円グラフを表示 */
drawArc(pcv);
/* 描画属性をデフォルトの値にする */
GMPenMode(oldpm);
GMForeColor(oldfc);
GMBackColor(oldbc);
GMFontMode(oldfm);
}
/******************************************************************************
* drawArc(): 円グラフの描画
******************************************************************************
* 引数: ComVal *pcv 共通変数へのポインタ
*/
void drawArc(ComVal *pcv)
{
int i, scale, op;
int lastPM, lastFC, lastBC, lastFM;
int deg, dw, rx, ry;
int rate[7], drpt[2][7];
char str[16];
Point pt;
calcRate(pcv, rate);
/* 360度 / 金額合計 = 1円当たりの角度を求める */
scale = KETA1 * 360 / pcv->sum[pcv->month - 1];
op = 450;
for (i = 0; i < 7; i++) {
/* 描画終了角度 */
drpt[1][i] = op;
/* 描画開始角度 */
drpt[0][i] = op - ((pcv->money[pcv->month - 1][i] * scale + KETA1 / 2) / KETA1);
/* 次の描画開始位置のために待避 */
op = drpt[0][i];
}
/* 描画属性設定 */
lastFC = GMForeColor(GC_WHITE);
lastBC = GMBackColor(GC_WHITE);
lastPM = GMPenMode(G_PSET);
lastFM = GMFontMode(G_PSET);
/* 描画する */
for (i = 0; i < 7; i++)
/* startとendが同じ時は円を描いてしまうのでその場合は描画しない */
if (drpt[0][i] != drpt[1][i]) {
/* 扇型の描画 */
GMForeColor(gColor[i]);
GMFillArc(&rcoval, drpt[0][i], drpt[1][i]);
}
GMForeColor(GC_BLACK);
GMFrameOval(&rcoval);
for (i = 0; i < 7; i++) {
dw = drpt[1][i] - drpt[0][i];
if (rate[i] != 0) {
/* 割合が0でない場合 */
deg = dw / 2 + drpt[0][i];
GMForeColor(GC_BLACK);
GMFontMode(G_PSET);
if (dw < 20) {
/* 角度が20度以下の場合 */
GMBackColor(GC_WHITE);
rx = 18;
ry = 12;
} else {
/* 角度が20度以上の場合 */
GMBackColor(gColor[i]);
rx = -18;
ry = -18;
}
/* 角度より円周上の位置を求める */
sprintf(str, "%.1f\0", (double) rate[i] / 10.0);
pt.x_y = angleToPos(deg, RADIUS + rx, RADIUS + ry);
pt.p.x += CENTERX;
pt.p.y += CENTERY;
/* (x,y)を中心に文字列を描画 */
drawStrM(str, pt.x_y);
}
}
GMForeColor(lastFC);
GMBackColor(lastBC);
GMPenMode(lastPM);
GMFontMode(lastFM);
}
/******************************************************************************
* calcRate(): 指定月の各項目のパーセンテージを計算
******************************************************************************
* 引数: ComVal *pcv 共通変数へのポインタ
* int *rate パーセンテージの値を格納するポインタ
*/
void calcRate(ComVal *pcv, int *rate)
{
int i, scale;
/* 100.0% / 金額合計 = 1円当たりのパーセンテージを求める */
scale = KETA2 * 1000 / pcv->sum[pcv->month - 1];
for (i = 0; i < 7; i++)
rate[i] = (pcv->money[pcv->month - 1][i] * scale + KETA2 / 2) / KETA2;
}
/******************************************************************************
* angleToPos(): 0~360度の値を円周上の座標に変換する
******************************************************************************
* 引数: int deg 角度(0~360)
* int rx 円の半径(x)
* int ry 〃 (y)
* 戻り値: LPoint
*/
LPoint angleToPos(int deg, int rx, int ry)
{
double dx, dy, rd;
Point pt;
rd = (double) deg / (360.0 / (PI * 2.0));
dx = cos(rd) * rx;
dy = sin(rd) * ry;
/* 整数になおすため、四捨五入 */
pt.p.x = (short)(dx + 0.5 * (dx / fabs(dx)));
pt.p.y = -(short)(dy + 0.5 * (dy / fabs(dy)));
return pt.x_y;
}
/******************************************************************************
* drawRadar(): レーダーチャートの描画
******************************************************************************
* 引数: ComVal *pcv 共通変数へのポインタ
*/
void drawRadar(ComVal *pcv)
{
int oldpm, oldfc, oldfm, oldff;
int i, j; /* ループカウンタ */
int max; /* 目盛りの最大値 */
int dMax; /* データの最大値 */
int val[7]; /* 各パラメータの大きさ(比) */
int temp; /* ワーク */
int len; /* 目盛り線の長さ */
double ang; /* 分割角度 */
double th; /* 回転角度 */
double vx[7], vy[7]; /* レーダーチャート各軸のベクトル */
double nx, ny; /* 軸の法線ベクトル */
char str[32]; /* 表示文字列格納用 */
Point pt, pt2, vpt[7];
LPoint oldlps;
/* データの最大値をdMaxとする */
dMax = 0;
for (i = 0; i < 7; i++) {
temp = pcv->money[pcv->month - 1][i];
if (dMax < temp)
dMax = temp;
}
/* 目盛りの最大値の計算 */
for (max = 10; ; max *= 10)
/* 除算の結果が1桁になるまで */
if (dMax / max < 10)
break;
/* 目盛りの最大値は5刻みの値にする */
for (i = 5; i <= 10; i += 5) {
temp = i * max;
/* 除算の結果が0 */
if (dMax / temp == 0) {
max = temp;
break;
}
}
/* 各データがmaxの何パーセントか計算する */
/* (小数点以下四捨五入) */
for (i = 0; i < 7; i++)
val[i] = (int)(100.0 * ((double) pcv->money[pcv->month - 1][i] / (double) max) + 0.5);
/* 各軸のベクトルの計算 */
ang = 0.897597901; /* 360/7度をradianに変換したもの */
for (i = 0; i < 7; i++) {
/* 回転角 */
th = ang * (double) i;
/* ang(rad)づつ回転(cw) */
vx[i] = sin(th);
vy[i] = -cos(th);
}
/* 描画属性設定 */
oldpm = GMPenMode(G_PSET);
oldfc = GMForeColor(GC_BLACK);
oldfm = GMFontMode(G_PSET);
/* タイトル */
oldff = GMFontFace(G_BOLD | G_ULINE);
drawStrZ("レ ー ダ ー チ ャ ー ト (単位:円)", LONGWORD(15, GRPY + 10));
GMFontFace(oldff);
/* 総額表示 */
sprintf(str, "合 計 %8d 円\0", pcv->sum[pcv->month - 1]);
drawStrZ(str, LONGWORD(270, GRPY + 10));
/* レーダーチャートの軸線7本の描画 */
for (i = 0; i < 7; i++) {
vpt[i].p.x = (int)(100.0 * vx[i]) + RADERSTX;
vpt[i].p.y = (int)(100.0 * vy[i]) + RADERSTY;
GMMove(LONGWORD(RADERSTX, RADERSTY)); /* ペンを移動する */
GMLine(LONGWORD(vpt[i].p.x, vpt[i].p.y)); /* 直線を描画する */
/* 軸ベクトルの法線ベクトル */
nx = vy[i];
ny = -vx[i];
/* 目盛りの描画 */
for (j = 1; j < 11; j++) {
/* 5の倍数の目盛りは長さ5/その他は2 */
len = (j == 5 || j == 10) ? 5 : 2;
/* ペンを移動する */
GMMove(LONGWORD(RADERSTX + (int)(10 * j * vx[i] + len * nx), RADERSTY + (int)(10 * j * vy[i] + len * ny)));
/* 直線を描画する */
GMLine(LONGWORD(RADERSTX + (int)(10 * j * vx[i] - len * nx), RADERSTY + (int)(10 * j * vy[i] - len * ny)));
}
}
/* 項目 */
drawStrZ("住居", LONGWORD(RADERSTX - 12, RADERSTY - 120));
vpt[1].p.x += 12;
vpt[1].p.y -= 12;
drawStrZ("光熱・水道", vpt[1].x_y);
vpt[2].p.x += 12;
drawStrZ("食物", vpt[2].x_y);
vpt[3].p.x -= 12;
vpt[3].p.y += 6;
drawStrZ("被服", vpt[3].x_y);
vpt[4].p.x -= 18;
vpt[4].p.y += 6;
drawStrZ("貯蓄", vpt[4].x_y);
vpt[5].p.x -= 72;
drawStrZ("教養・娯楽", vpt[5].x_y);
vpt[6].p.x -= 36;
vpt[6].p.y -= 12;
drawStrZ("雑費", vpt[6].x_y);
/* WARNING : dMax が0だったら */
if (dMax == 0)
return;
/* データの描画 */
/* 1番目のデータを始点とする */
pt.p.x = (int)(val[0] * vx[0]) + RADERSTX;
pt.p.y = (int)(val[0] * vy[0]) + RADERSTY;
GMMove(pt.x_y);
/* 一周する */
oldlps = GMPenSize(LONGWORD(2, 2));
GMForeColor(GC_RED);
for (i = 1; i < 7; i++) {
pt2.p.x = (int)(val[i] * vx[i]) + RADERSTX;
pt2.p.y = (int)(val[i] * vy[i]) + RADERSTY;
GMLine(pt2.x_y);
}
/* 最後は始点につけて閉じる */
GMLine(pt.x_y);
GMPenSize(oldlps);
/* 目盛りの値を入れる */
/* max/2 */
GMForeColor(GC_BLACK);
sprintf(str, "%8d\0", max / 2);
drawStrZ(str, LONGWORD(RADERSTX - 54, RADERSTY - 10 * 5 - 6));
/* max */
sprintf(str, "%8d\0", max);
drawStrZ(str, LONGWORD(RADERSTX - 54, RADERSTY - 10 * 10 - 6));
/* 描画属性をデフォルトの値にする */
GMPenMode(oldpm);
GMForeColor(oldfc);
GMFontMode(oldfm);
}
/******************************************************************************
* drawBar(): 棒グラフの描画
******************************************************************************
* 引数: ComVal *pcv 共通変数へのポインタ
*/
void drawBar(ComVal *pcv)
{
int i, j; /* ループカウンタ */
int kt, mt, st;
int len, keta, dot, measmax, meas, dMax;
int oldpm, oldfc, oldfm, oldff;
int mon[4];
Point pt;
Rect rc; /* レクタングル */
char str[32]; /* 表示文字列用 */
/* 表示する月を設定 */
mon[3] = pcv->month; /* 今月 */
mon[2] = lastMonth(mon[3]); /* 1ヶ月前 */
mon[1] = lastMonth(mon[2]); /* 2ヶ月前 */
mon[0] = lastMonth(mon[1]); /* 3ヶ月前 */
/* 描画属性設定 */
oldpm = GMPenMode(G_PSET);
oldfc = GMForeColor(GC_BLACK);
oldfm = GMFontMode(G_PSET);
/* タイトル */
oldff = GMFontFace(G_BOLD | G_ULINE);
drawStrZ("棒 グ ラ フ (単位:円)", LONGWORD(15, GRPY + 10));
GMFontFace(oldff);
/* 総額表示 */
sprintf(str, "合 計 %8d 円\0", pcv->sum[pcv->month - 1]);
drawStrZ(str, LONGWORD(270, GRPY + 10));
/* 横軸、縦軸を描画 */
GMMove(LONGWORD(BARSTX, BARSTY)); /* ペンを移動する */
GMLine(LONGWORD(BARSTX + BARLEN + 20, BARSTY)); /* 直線を描画する */
GMMove(LONGWORD(BARSTX, BARSTY)); /* ペンを移動する */
GMLine(LONGWORD(BARSTX, BARSTY + 160)); /* 直線を描画する */
/* データの最大値dMaxを求める */
/* 今月 */
dMax = 0;
for (i = 0; i < 4; i++)
if (dMax < pcv->sum[mon[i] - 1])
dMax = pcv->sum[mon[i] - 1];
/* 最大値の桁数を求める(桁数を文字数でカウント) */
kt = sprintf(str, "%d", dMax);
keta = (int) pow(10.0, (double)(kt - 1)); /* 10^kt */
/* 目盛りの最大値 */
measmax = ((dMax / keta) + 1) * keta;
meas = keta / 10;
/* 1円当たりのドット数を求める */
dot = (BARSCL * BARLEN) / measmax;
/* 最大値の桁数が1桁の場合 */
if (kt == 1) {
kt = 2;
measmax = 10;
meas = 1;
dot = (BARSCL * BARLEN) / measmax;
}
/* 目盛り上の数値の単位を調整 */
if (kt > 2) {
mt = 2;
st = kt - mt - 1;
} else {
st = 0;
mt = kt - 1;
}
/* 目盛りと、単位の表示 */
for (i = 0; i <= measmax / meas; i++) {
if ((i % 5) == 0)
/* 目盛りの番号が5/10進むごとに */
len = ((i % 10) != 0) ? 3 : 5;
else
/* 目盛りの分割数が30以下/その他の目盛り番号の場合 */
len = (measmax / meas <= 30) ? 2 : 0;
/* 目盛りの描画と数値の表示 */
j = (dot * meas * i + BARSCL / 2) / BARSCL;
if (len == 5) {
sprintf(str, "%d\0", i * (int) pow(10.0, (double)(mt - 1)));
drawStrM(str, LONGWORD(BARSTX + j, BARSTY - len - 6));
}
GMMove(LONGWORD(BARSTX + j, BARSTY + len)); /* ペンを移動する */
GMLine(LONGWORD(BARSTX + j, BARSTY - len)); /* 直線を描画する */
}
/* 3桁以上の数値の場合 */
if (st != 0) {
/* 目盛りの数値のスケール表示 */
sprintf(str, "(x%d)\0", (int) pow(10.0, (double) st));
drawStrZ(str, LONGWORD(BARSTX + BARLEN + 18, BARSTY - 11));
}
/* 月の表示 */
for (j = 0; j < 4; j++) {
sprintf(str, "%2d月\0", mon[j]);
drawStrZ(str, LONGWORD(BARSTX - 24 - 3, BARSTY + 14 + j * BAROFF));
}
/* 棒グラフの描画 */
for (j = 0; j < 4; j++) {
rc.d.right = BARSTX;
rc.d.top = BARSTY + 8 + j * BAROFF;
for (i = 0; i < 7; i++) {
rc.d.left = rc.d.right;
rc.d.right = rc.d.left + (dot * pcv->money[mon[j] - 1][i] + BARSCL / 2) / BARSCL;
rc.d.bottom = rc.d.top + 25;
GMForeColor(gColor[i]);
GMFillRect(&rc);
GMForeColor(GC_BLACK);
rc.d.right++;
/* 縁取りの描画 */
GMFrameRect(&rc);
rc.d.right--;
}
}
GMForeColor(GC_BLACK);
/* 総額表示 */
for (j = 0; j < 4; j++) {
sprintf(str, "%8d 円\0", pcv->sum[mon[j] - 1]);
drawStrZ(str, LONGWORD(BARGX, BARSTY + 14 + j * BAROFF));
}
/* 項目名表示 */
/* 棒グラフに対応した色の付いたレクタングルと文字で表す */
for (i = 0; i < 7; i++) {
rc.d.left = BARTX + (i / 2) * 90;
rc.d.top = BARTY + (i % 2) * 20;
rc.d.right = rc.d.left + 10;
rc.d.bottom = rc.d.top + 10;
GMForeColor(gColor[i]);
GMFillRect(&rc);
GMForeColor(GC_BLACK);
GMFrameRect(&rc);
pt.p.x = rc.d.left + 10 + 5;
pt.p.y = rc.d.top;
drawStrZ(crclTtl[i], pt.x_y);
}
/* 描画属性をデフォルトの値にもどす */
GMPenMode(oldpm);
GMForeColor(oldfc);
GMFontMode(oldfm);
}
/******************************************************************************
* drawLine(): 折れ線グラフの描画
******************************************************************************
* 引数: ComVal *pcv 共通変数へのポインタ
*/
void drawLine(ComVal *pcv)
{
int len, i, j;
int oldpm, oldfc, oldfm, oldff;
int mt, st;
int kt, keta, dot, measmax, meas, dMax;
int mon[4];
Point pt;
LPoint oldlps;
Rect rc;
char str[32];
/* 月 */
mon[3] = pcv->month;
mon[2] = lastMonth(mon[3]);
mon[1] = lastMonth(mon[2]);
mon[0] = lastMonth(mon[1]);
/* データの最大値dMaxを求める */
dMax = 0;
for (j = 0; j < 4; j++)
for (i = 0; i < 7; i++)
if (dMax < pcv->money[mon[j] - 1][i])
dMax = pcv->money[mon[j] - 1][i];
/* 最大値の桁数を求める(桁数を文字数でカウント) */
kt = sprintf(str, "%d", dMax);
keta = pow(10.0, (double)(kt - 1)); /* 10^kt */
/* 目盛りの最大値 */
measmax = ((dMax / keta) + 1) * keta;
meas = keta / 10;
/* 1円当たりのドット数を求める */
dot = (LINESCL * LINEVL) / measmax;
/* 最大値の桁数が1桁の場合 */
if (kt == 1) {
kt = 2;
measmax = 10;
meas = 1;
dot = (LINESCL * LINEVL) / measmax;
}
/* 目盛り上の数値の単位を調整 */
if (kt > 2) {
mt = 2;
st = kt - mt - 1;
} else {
st = 0;
mt = kt - 1;
}
/* 描画属性設定 */
oldpm = GMPenMode(G_PSET);
oldfc = GMForeColor(GC_BLACK);
oldfm = GMFontMode(G_PSET);
/* タイトル */
oldff = GMFontFace(G_BOLD | G_ULINE);
drawStrZ("折 れ 線 グ ラ フ (単位:円)", LONGWORD(15, GRPY + 10));
GMFontFace(oldff);
/* 総額表示 */
sprintf(str, "合 計 %8d 円\0", pcv->sum[pcv->month - 1]);
drawStrZ(str, LONGWORD(270, GRPY + 10));
/* 項目名表示 */
/* 折れ線グラフに対応した色の付いた線と文字で表す */
for (i = 0; i < 7; i++) {
rc.d.left = LINETX + (i / 2) * 90;
rc.d.top = LINETY + (i % 2) * 15 + 5;
rc.d.right = rc.d.left + 10;
rc.d.bottom = rc.d.top + 3;
GMForeColor(gColor[i]);
GMFillRect(&rc);
GMForeColor(GC_BLACK);
pt.p.x = rc.d.left + 15;
pt.p.y = rc.d.top - 5;
drawStrZ(crclTtl[i], pt.x_y);
}
/* 目盛り軸 */
GMForeColor(GC_BLACK);
/* 縦軸、横軸を表示 */
/* 横軸は5ドットだけ下にずらす(データで0を見易いように) */
GMMove(LONGWORD(LINESTX, LINESTY + 5)); /* ペンを移動する */
GMLine(LONGWORD(LINESTX + LINEHL, LINESTY + 5)); /* 直線を描画する */
GMMove(LONGWORD(LINESTX, LINESTY + 5)); /* ペンを移動する */
GMLine(LONGWORD(LINESTX, LINESTY - LINEVL - 5)); /* 直線を描画する */
/* 金額の目盛りと、単位の表示 */
for (i = 0; i <= measmax / meas; i++) {
if ((i % 5) == 0)
/* 目盛りの番号が5/10進むごとに */
len = ((i % 10) != 0) ? 3 : 5;
else
/* 目盛りの分割数が30以下/その他の目盛り番号の場合 */
len = (measmax / meas <= 30) ? 2 : 0;
/* 目盛りの描画と数値の表示 */
j = (dot * meas * i + LINESCL / 2) / LINESCL;
if (len == 5) {
sprintf(str, "%4d\0", i * (int) pow(10.0, (double)(mt - 1)));
drawStrZ(str, LONGWORD(LINESTX - 5 - 26, LINESTY - j - 6));
}
/* ペンを移動する */
GMMove(LONGWORD(LINESTX - len, LINESTY - j));
/* 直線を描画する */
GMLine(LONGWORD(LINESTX + len, LINESTY - j));
}
/* 3桁以上の数値の場合 */
if (st != 0) {
/* 目盛りの数値のスケール表示 */
j = sprintf(str, "(x%d)\0", (int) pow(10.0, (double) st));
drawStrZ(str, LONGWORD(LINESTX - j * 6 - 2, LINESTY - LINEVL - 18));
}
/* 月表示 */
for (j = 0; j < 4; j++) {
/* ペンを移動する */
GMMove(LONGWORD(LINESTX + 30 + j * LINEOFF, LINESTY));
/* 直線を描画する */
GMLine(LONGWORD(LINESTX + 30 + j * LINEOFF, LINESTY + 5 + 5));
sprintf(str, "%2d月\0", mon[j]);
drawStrZ(str, LONGWORD(LINESTX + 30 + j * LINEOFF - 12, LINESTY + 5 + 5 - 2));
}
/* 折れ線グラフの描画 */
oldlps = GMPenSize(LONGWORD(2, 2));
for (i = 0; i < 7; i++) {
GMForeColor(gColor[i]);
pt.p.x = LINESTX + 30;
for (j = 0; j < 4; j++) {
pt.p.y = LINESTY - (dot * pcv->money[mon[j] - 1][i] + LINESCL / 2) / LINESCL;
if (j == 0)
GMMove(pt.x_y);
else
GMLine(pt.x_y);
pt.p.x += 75;
}
}
GMPenSize(oldlps);
/* 描画属性をデフォルトの値に戻す */
GMPenMode(oldpm);
GMForeColor(oldfc);
GMFontMode(oldfm);
}